#extractor <Json.st.ext>

// 19 regulations:
Json : 
    Object // [0] [0]
  | Array ; // [1] [1]
Object : 
    '{' '}' // [0] [2]
  | '{' Members '}' ; // [1] [3]
Array : 
    '[' ']' // [0] [4]
  | '[' Elements ']' ; // [1] [5]
Members : 
    Members ',' Member // [0] [6]
  | Member ; // [1] [7]
Elements : 
    Elements ',' Element // [0] [8]
  | Element ; // [1] [9]
Member : 
    'string' ':' Value ; // [0] [10]
Element : 
    Value ; // [0] [11]
Value : 
    'null' // [0] [12]
  | 'true' // [1] [13]
  | 'false' // [2] [14]
  | 'number' // [3] [15]
  | 'string' // [4] [16]
  | Object // [5] [17]
  | Array ; // [6] [18]

// 2 token statements:
%%"([^"\\\u0000-\u001F]|\\["\\/bfnrt]|\\u[0-9A-Fa-f]{4})*"%% 'string' // [0]
%%[-]?(0|[1-9][0-9]*)([.][0-9]+)?([eE][+-]?[0-9]+)?%% 'number' // [1]

// 0 precedences

// options
%grammarName Json
%start Json
%blockComment on
%inlineComment on
%validScopeChars [\u0001-\uFFFF]
%validGlobalChars [\u0001-\uFFFF]

